package com.drug.mingkang.service.impl;

import com.drug.mingkang.mapper.*;
import com.drug.mingkang.model.*;
import com.drug.mingkang.model.vo.ImmPurchaseVo;
import com.drug.mingkang.permission.model.PerUsers;
import com.drug.mingkang.service.ImmFinanceService;
import com.drug.mingkang.utils.AuditStatus;
import com.drug.mingkang.utils.ResponseMessage;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;

/**
 * 分公司财务(ImmFinance)表服务实现类
 *
 * @author wenchangjian
 * @since 2020-08-11 14:20:12
 */
@Service("immFinanceService")
public class ImmFinanceServiceImpl implements ImmFinanceService {
    @Resource
    private ImmFinanceMapper immFinanceMapper;

    @Resource
    private ImmPurchaseMapper immPurchaseMapper;

    @Resource
    private AuditRecordMapper auditRecordMapper;

    @Resource
    private HqFinancingMapper hqFinancingMapper;

    /**
     * 分公司财务明细服务
     */
    @Resource
    private ImmRicherMapper immRicherMapper;


    /**
     * 总公司财务明细服务
     */
    @Resource
    private HqRicherMapper hqRicherMapper;

    /**
     * 通过ID查询单条数据
     *
     * @param financeId 主键
     * @return 实例对象
     */
    @Override
    public ImmFinance queryById(String financeId) {
        return this.immFinanceMapper.queryById(financeId);
    }

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit 查询条数
     * @return 对象列表
     */
    @Override
    public List<ImmFinance> queryAllByLimit(int offset, int limit) {
        return this.immFinanceMapper.queryAllByLimit(offset, limit);
    }

    /**
     * 新增数据
     *
     * @param immFinance 实例对象
     * @return 实例对象
     */
    @Override
    public ImmFinance insert(ImmFinance immFinance) {
        this.immFinanceMapper.insert(immFinance);
        return immFinance;
    }

    /**
     * 修改数据
     *
     * @param immFinance 实例对象
     * @return 实例对象
     */
    @Override
    public ImmFinance update(ImmFinance immFinance) {
        this.immFinanceMapper.update(immFinance);
        return this.queryById(immFinance.getFinanceId());
    }

    /**
     * 通过主键删除数据
     *
     * @param financeId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(String financeId) {
        return this.immFinanceMapper.deleteById(financeId) > 0;
    }

    /**
     * 财务订单审核 修改审核状态
     * @param immPurchaseVo 分公司采购单Vo
     * @param auditRecord 审核
     * @param session   当前会话
     * @return ResponseMessage
     */
    @Override
    public ResponseMessage updateStatus(ImmPurchaseVo immPurchaseVo, AuditRecord auditRecord, HttpSession session) {
        PerUsers perUsers = (PerUsers) session.getAttribute("perUsers");
        //修改审核状态
        immPurchaseMapper.fupdate(immPurchaseVo.getPurchaseId(), immPurchaseVo.getIsva());
        //审核表添加记录
        //添加审核人
        auditRecord.setAuditor(perUsers.getUserName());
        //添加业务id
        auditRecord.setBusinessId(immPurchaseVo.getPurchaseId());
        //判断是否为分公司财务通过 分公司财务减 总公司财务加 并且保存出入帐明细
        if(String.valueOf(AuditStatus.SUBMIT_FGSCWSGTG.status).equals(immPurchaseVo.getIsva())){
            //根据采购单id查询这批采购单
            ImmPurchase immPurchase = immPurchaseMapper.queryById(immPurchaseVo.getPurchaseId());
            //根据分公司id 修改分公司财务金额(出账)
            immFinanceMapper.updateMoney(immPurchase.getImmId(), immPurchase.getPurchaseMoney(), "2");

            //保存分公司出账明细
            //根据分公司id查分公司财务id
            ImmFinance immFinance = immFinanceMapper.findByImmId(immPurchase.getImmId());
            //分公司出账明细
            ImmRicher immRicher = new ImmRicher();
            //财务id
            immRicher.setFinanceId(immFinance.getFinanceId());
            //出账金额（采购总金额）
            immRicher.setRicherMoney(immPurchase.getPurchaseMoney());
            //操作人
            immRicher.setOperator(perUsers.getUserName());
            //出账说明
            immRicher.setRicherRemark("向总公司进货");
            //出账备注
            immRicher.setRemark(immPurchase.getRemark());
            //状态  出账
            immRicher.setIsva(2);
            //分公司采购单id
            immRicher.setDrugId(immPurchase.getPurchaseId());
            //添加出账明细
            immRicherMapper.insertSelective(immRicher);

            //总公司财务入账
            hqFinancingMapper.updateMoney("0", immPurchase.getPurchaseMoney(), "1");
            //保存总公司入账明细
            HqRicher hqRicher = new HqRicher();
            //总公司财务id
            hqRicher.setHandFinancingId("0");
            //分公司采购单id
            hqRicher.setDrugId(immPurchase.getPurchaseId());
            //入账总金额（采购总金额）
            hqRicher.setRicherPrice(immPurchase.getPurchaseMoney());
            //状态 入账
            hqRicher.setState(1);
            //入账时间
            hqRicher.setRicherTime(new Date());
            //操作人
            hqRicher.setOper(perUsers.getUserName());
            //入账备注
            hqRicher.setRemark(immPurchase.getRemark());

            //添加总公司入账明细
            hqRicherMapper.insertSelective(hqRicher);
        }
        return auditRecordMapper.insertSelective(auditRecord) > 0 ? ResponseMessage.success("审核成功") : ResponseMessage.error("审核失败");
    }

    @Override
    public int updateOne(ImmRicher immRicher, String immName) {
        return this.immFinanceMapper.updateOne(immRicher,immName);
    }

    @Override
    public ImmFinance findByImmName(String ImmName) {
        return this.immFinanceMapper.findByImmName(ImmName);
    }
}